package pub.cleangao.codegen.literal;

import pub.cleangao.codegen.GenConfigHolder;
import pub.cleangao.codegen.enquiry.TableInfo;

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;


public abstract class AbstractTemplate implements Template {

    /**
     * 模板类型
     */
    protected abstract TemplateType type();

    /**
     * 模板路径
     */
    protected abstract String templatePath();


    /**
     * 写入文件
     *
     * @param tableInfo 表信息
     * @param config    配置
     */
    public void writeOutToFile(TableInfo tableInfo, GenConfigHolder config) {
        String[] levelCodeArr = config.getGenerateFolder().split(",");
        if (levelCodeArr == null || levelCodeArr.length == 0) {
            // 若配置文件未设置entity, 依然生成
            LiteralProducer.generateCodeFile(TemplateType.ENTITY, templatePath(), tableInfo, config);
            return;
        }
        List<String> inProcessing = Stream.of(levelCodeArr).map(String::toUpperCase).collect(Collectors.toList());
        if (inProcessing.contains(TemplateType.API.name())) {
            inProcessing.add(TemplateType.API_DTO.name());
        }
        if (!inProcessing.contains(type().name())) {
            // 若配置文件未设置entity, 依然生成
            if(TemplateType.ENTITY.equals(type())){
                LiteralProducer.generateCodeFile(TemplateType.ENTITY, templatePath(), tableInfo, config);
            }
            return;
        }
        LiteralProducer.generateCodeFile(type(), templatePath(), tableInfo, config);
    }
}